#include "DRV8701E.h"

void DRV8701E::DRV_Init()
{
    Init(PH);
    Init(EN);
    Brake();
}

uint32_t DRV8701E::Limit(uint32_t _out)
{
    if(_out > OUT_MAX)
        return OUT_MAX;
    else
        return _out;
}

void DRV8701E::Brake()
{
    SetDuty(PH,0);
    SetDuty(EN,0);
}
void DRV8701E::Forward(uint32_t _out)
{
    SetDuty(PH,OUT_MAX);
    SetDuty(EN,Limit(_out));
}
void DRV8701E::Reverse(uint32_t _out)
{
    SetDuty(PH,0);
    SetDuty(EN,Limit(_out));
}
void DRV8701E::SetOut(int32_t _out)
{
    uint32_t out = 0;
    if(_out < 0)
    {
        out = -_out;
        Reverse(Limit(out));
    }
    else if(_out > 0)
    {
        out = _out;
        Forward(Limit(out));
    }
    else if(_out == 0)
    {
        Brake();
    }
}
